約 2,837,426 件
https://w.atwiki.jp/droid/pages/23.html
情報・ファイル交換Bump(無料) ファイル管理・転送ES ファイルエクスプローラー(無料) AndroZip File Manager(無料) バックアップApp Backup Restore(無料) コメント 情報・ファイル交換 Bump(無料) 赤外線のないiPhoneやAndroidなどで端末同士をぶつけて写真や連絡先などの情報交換をするための、まさに世界標準と呼べるソフト。 使い方に少しだけクセがあり英語だと分かり難いかもしれないので、最初は下記の説明を読んで設定してみると良いかも。 https //market.android.com/details?id=com.bumptech.bumpga http //andronavi.com/2010/07/29996 ファイル管理・転送 ES ファイルエクスプローラー(無料) 内部ファイルやストレージ(SDC)だけでなく、PCなど共有ファイルへの接続やFTPまで可能な、シンプルな総合多機能ファイラー。 世界でも一二を争う支持率なのに、広告もなく日本語にも対応しており、ファイル管理ソフトのお薦め。 https //market.android.com/details?id=com.estrongs.android.pop http //androider.jp/a/0689e0730ec47f6d/ AndroZip File Manager(無料) https //market.android.com/details?id=com.agilesoftresource バックアップ App Backup Restore(無料) シンプル&強力なアプリのバックアップツール https //play.google.com/store/apps/details?id=mobi.infolife.appbackup http //appllio.com/android-tool-app/%E3%82%A2%E3%83%97%E3%83%AA%EF%BC%9AApp-Backup-Restore コメント 名前 コメント
https://w.atwiki.jp/okayamasheetmetal/pages/13.html
溶接板金CAD自動化研究所 ファイルは下の方にあります。 合計: - 今日: - 昨日: - トップページの合計: - 2Dから3Dへの変換に使ったDXFファイルなどで使ったファイルは、下の添付ファイルにあります。
https://w.atwiki.jp/kurokage136/pages/450.html
▽タグ一覧 ファイルファンタジアとは、メイドウィン小説に登場する用語でありゲームソフトである。 リアルワールドには存在しない作品。 ジャンルは全てRPGで全部で40シリーズもある超大作。 通称『FF』 某作品とは関係ない、本当に関係ない。 『ファイル』とあるようにゲーム内はファンタジーでありながら近未来的な要素があり、2つの要素が綺麗に積み重なっている さて本題に移ろう このファイルファンタジアというシリーズは、時空においても類を見ない程の最悪のクソゲー作品なのだ しかも1から40まで全部クソ、その作品特有のクソ要素まで存在する役満モノである 作中で登場したのは16と21のみだが、それ以外もとにかく酷い 大まかな問題点 ①作品の売りであるファイルが役に立たない ファイルはゲーム内で魔法代わりに使用できるが、強力なものは解凍するのに何ターンも掛かってしまう 解凍する時間で通常攻撃を連発した方が早く終わる 解凍が必要ないファイルは固定ダメージで中盤以降は使い物にならないため結果的にファイルを使う必要性が無くなってしまう ②イライラするラスボス戦 ラスボスはシリーズごとに様々な種類が存在し、様々な技を使うがそのどれもがプレイヤーの神経を狂わせるような物ばかり 作中で出てきたものでも 7『本体に他作品のデータが入ってるいると無敵になる』 11『自分以外のゲームのデータを勝手に削除する』 16『ウイルスを入れる技で本当にゲーム機内にウイルスを流してくる』 と何故かゲームに関係ないところに関わる攻撃をしてくる、16に至ってはただのサイバー攻撃である ③手抜き制作 実は3以降は大部分のデータを使いまわして3日に1日のペースで新作を作った、思いっきり手抜き作品。 制作陣は3から40まで一気に作ってゲーム店内を圧迫することで『塵も積もれば山となる作戦』を決行したという 当然ながら売れることなく返品されるどころか賠償金を請求され、3から40合わせて膨大な額となって会社が倒産するという残当な末路を迎えてしまった ④パクリ 上記の略称を見てわかる通りタイトルは完全にファイナルファンタジーのパクリ 最初の1と2の内容はドラゴンキングに支配された世界を救う普通のファンタジーとまんまドラゴンクエスト、その他にもパクリネタが数多くある 1番酷いのが21で、FFドラクエポケモンに加え数多くの時空の名作RPG主人公によく似た悪役を倒していくというどっかのチートなスレイヤーじみた内容をしている と、数多くのクソ要素を抱えており『クソゲー界のたくっちスノー』『何のために作られたのか何も分からないゲーム』等と散々な言われようとなった メイドウィン小説におけるFF マリオと彩月のクソゲー日記で登場 マリオたちは16と21をプレイ、彩月は殆どプレイしていたらしい ちなみに、18はあまりにクソすぎて人間が触れてはならない作品らしい。
https://w.atwiki.jp/styleshare/pages/70.html
ファイルアップロードについて このWikiへスタイルファイルや、プレビュー用の画像を公開するためにはそれらのファイルを、どこかへアップロードしてそこからリンクを張ることになります。 ここでは外部のアップローダ並びに専用のアップローダーを利用する場合と、このWikiの各ページに対して、アップロードする方法について解説します。 基本的にはこのWikiの各ページごとにファイルをアップロードする事も可能です。 ただ、その場合はオンラインインストールが行えないという制限が生じることと、既にアップロードされて登録されているファイル名とのバッティングを起こさない様に、ユーザーが気をつける必要が生じます。 以上のことからファイルのアップロードは外部のアップローダーの利用を強く推奨します。 外部のアップローダーを利用する場合 StyleEditorでエクスポートしたファイルはuser.styleという独自の拡張子を採用していますので、アップローダーによっては受け付けてくれない場合があります。 かといってzipなどに圧縮してしまうと、折角のオンラインインストール機能が生かせず、いったんダウンロードした後に展開してから、インポートしなくてはならなくなります。 また、ファイルをそのままアップロード出来たとしても、時間とともに(アップロード数制限のあるところ)自動で消去されるサービスもありますので、そのようなところからのリンクは避けてください。 中にはログインした状態でないとファイルを取得できないサービスもあるようですが、公開用途としては不適切ですのでご注意ください。アップローダーに利用できるサービスの一例 以下にスタイルファイルおよび画像のアップロードができて、さらにはそこからリンクを張ってStyleShareで恒久的に利用可能なフリーサービスの一例を挙げておきます。Dropbox :フリーで2GBまで利用可能(要登録) Google Pages :Googleのアカウントがあれば利用可能 最大100MB 探せば他にもいっぱいあるでしょうから、「ここは使えるよ」といった情報をお持ちの方は、追記して頂けると助かります。 専用アップローダーを利用する場合 基本的には外部アップローダーと何ら変わるものではありません。 ただ、ページを統合してアクセスしやすくしているだけに過ぎませんし、現在は暫定的なものとなっています。 ファイルをアップロードしたら、リストに現れたファイル名を右クリックして【ショートカットのコピー】でクリップボードへアドレスを渡し、テンプレートに貼り付けるといった使い方になります。 このWikiにファイルをアップロードする場合 このWikiの、フッタにあるメニューから【アップロード】をクリックすることで、現在閲覧中のページに対してファイルをアップロードする事が出来ます。 この場合、アップロードされたファイルはそのページに対しての「添付ファイル」としてアップロード画面、もしくはページ編集画面の下部に、ハイパーリンクされて表示されるようになっています。 ファイルへのリンクをコピーする場合には、リンクを右クリックして【ショートカットのコピー】を利用します。 ただ、ここで気をつけていただきたいのはこのWikiへuser.style形式のファイルをアップロードした場合、そのパスをコピーして張られたリンクはファイルそのものへのリンクではないためにオンラインインストールすることが出来ません。つまり、StyleEditorのインストール用ダイアログは開かれずに通常のダウンロードダイアログが出現します。 この場合は、ダウンロード後にスタイル管理画面からインポートをすることで利用可能になりますが、あまりスマートではありませんので、できることならば外部アップローダーの利用を推奨します。 また、繰り返しになりますが、ファイルをアップロードする際には既にアップロードされているファイル名とのバッティングを起こさ無いように気をつけなくてはなりません。 すでに同名のファイルがアップされている場合には、新たにアップロードするファイル名を適宜変更してください。 たとえば[hogehoge.user.style]というファイルを登録しようとしたけれど既に存在していた場合、[hogehohe_20090130.user.style]などのように、登録時の日付を付加すると新旧が判別しやすくて便利かもしれません。
https://w.atwiki.jp/fumiduki1985/pages/187.html
globモジュールのglob.glob()関数を使用すると可能。 記述例: import glob list1 = glob.glob("./dir/*") # dirフォルダ内のすべてのファイル名を取得する list2 = glob.glob("./dir/*.txt") # dirフォルダ内のすべてのtxtファイル名を取得する このページのタグ一覧 Python プログラミング
https://w.atwiki.jp/abaddon/pages/73.html
別件依頼 ファイル1|ファイル2|ファイル3|ファイル4|ファイル5|ファイル6|ファイル7|ファイル8|ファイル9|ファイル10 別件依頼ファイル7 青=何度でも受けられる 赤=ボス戦有り 依頼名 依頼主 依頼内容 報酬 備考 大量入荷作戦じゃ(3) 金王屋 生玉1個 秘蔵濁酒まさむね5個 4章以降 新世界の店主から 植物を探しています(3) 西村博士 千手草 クレタの女神像1個 5章以降 新世界の店主から 人探しを手伝ってくれ(3) 佐竹健三 九条千枝子の写真 12000円 5章以降 深川町の大國湯の佐竹から3回まで可能 仕入れ不足なんです(3) 原田商会 ペルシアの彩陶器2個 元素115 2個 5章以降 竜宮の女将から手間賃6000円貰える 宝石収集依頼(4) 謎の宝石商R オニキス4個トパーズ2個ルビー1個 アミュレット1個 5章以降ジュボッコ等との悪魔会話 炎の援軍を乞う! 北方地区担当サマナー タムラ 氷結半減持ちの紅蓮ドゥン ガーネット4個 5章以降 新世界の店主から 悪魔捜索です(2) ヤタガラス 御魂クシミタマ 管の数+1→サファイア6個 5章以降 ヤタガラスの使者から 飢餓の天秤をキミに 金髪の青年 天主教会でボス戦 飢餓の天秤1個 5章以降 天主教会の金髪の青年から何度でも 不況の傷跡 帝都社会局職業課 萬年町でボス戦 バビロンの石板1個 5章以降 霞台の定吉からベルフェゴール解禁振動付き選択肢有り 帝都のツキガミさま 宮内省式部職 修験界東方分社でボス戦 紅蓮神金5個 6章以降 ヤタガラスの使者から 植物を探しています(3) 千手草はアカラナ回廊2020から行ける時空の狭間に生息 人探しを手伝ってくれ(3) 銀座町の北側出口前にいる女性に話しかけると写真を撮れる(佐竹から依頼の話を聞くまで撮れない) 3回写真を撮ると・・・ 炎の援軍を乞う! 銀氷 アルラウネ(氷結半減) × 技芸 ティターニア 飢餓の天秤をキミに 晴海町・天主教会の奥に進むと、「ここに、とどまる」か問われ、2回「はい」を選択するとボス戦(制限時間5分) 管属 名前 LV HP 力 魔 耐 運 特技 物理 火炎 電撃 呪殺 万能 経験値 アイテム 銃撃 氷結 衝撃 精神 お金 魔人 ブラックライダー 60 6440 19 21 25 16 猛突進ムド飢餓の執行ディアラハンソウルバランス 50 100 100 無効 100 3666 50 100 100 無効 3666 不況の傷跡 萬年町・オカマロヲドの奥を左に曲がったところにいる男に話しかける振動付き選択肢(属性値変動)それでも正直に生きるべきだ(-1) ならば調子よく生きればいい(+1) ボス戦(制限時間2分)ガード不可のメギド、即死攻撃のマハ・ムドオンを使用してくる上に詠唱がかなり早いので要注意 ライドウは遠くで待機し呪殺無効の仲魔に真空刃連発させておけば勝てる 管属 名前 LV HP 力 魔 耐 運 特技 物理 火炎 電撃 呪殺 万能 経験値 アイテム 銃撃 氷結 衝撃 精神 お金 技芸 ベルフェゴール 56 12800 18 40 22 10 マハ・ムドオンメギドデ・カジャマハ・ムド 100 100 100 無効 100 3000 無効 100 100 無効 3600 帝都のツキガミさま 修験界 東方分社の北ブロックに進むと、「ここに、とどまる」か問われ、2回「はい」を選択するとボス戦(制限時間5分)ストーリー上で戦った時と対策は同じでいい。 管属 名前 LV HP 力 魔 耐 運 特技 物理 火炎 電撃 呪殺 万能 経験値 アイテム 銃撃 氷結 衝撃 精神 お金 魔人 ヤクビョウガミ 64 8650 27 23 21 14 突進永眠の誘い天罰ディアラマ雄渾撃 50 50 50 吸収 100 3300 50 50 50 無効 5000 禍津 ゾンビージュンサ 35 368 18 8 14 8 ドルミナー 100 100 100 無効 100 0 100 100 100 無効 0 上へ
https://w.atwiki.jp/girlsroyale/pages/135.html
同名ドール [海のファミレス]チャンパデータ [海のファミレス]チャンパ 限界突破データ 同名ドール [海のファミレス]チャンパ [元気なファミレスメイド]チャンパ [ファミレスメイド]チャンパ [ドール]チャンパ [海のファミレス]チャンパ blankimgプラグインエラー:ご指定のファイルがありません。アップロード済みのファイルを指定してください。 データ 属性 テクニック レアリティ HR 最大Lv 50 コスト 12 攻撃 1350 HP 4600 MAX攻撃 2350 MAXHP 8250 リーダー効果 技巧の心得テクニック属性のHPを14%アップ 秘技 お待ちどうさま!!(物理)相手に6000ダメージ(5ターン目に発動可能) スキル テクニックオーラテクニック属性のHPを中アップ セリフ (お客様には罪はないものね…せっかく海まで遊びに来たのに…早くマスターと遊びたいな…)ビールお待たせしましたー♪ [海のファミレス]チャンパ 限界突破 blankimgプラグインエラー:ご指定のファイルがありません。アップロード済みのファイルを指定してください。 データ 属性 テクニック レアリティ HRMAX 最大Lv 60 コスト 12 攻撃 1350 HP 4600 MAX攻撃 2950 MAXHP 10250 リーダー効果 技巧の心得テクニック属性のHPを14%アップ 秘技 お待ちどうさま!!(物理)相手に6000ダメージ(5ターン目に発動可能) スキル テクニックオーラテクニック属性のHPを中アップ セリフ マスターお待たせしました。ご注文の特製かき氷です。せっかくなのでご一緒にいかがですか?早くしないと溶けちゃいますよ♪
https://w.atwiki.jp/hihiro/pages/67.html
カウント - 2022年05月26日 (木) 00時32分59秒; 「日本語プログラミング【なでしこ】」で作ったプログラムです 「*.nako」の実行には、「なでしこ」のインストールが必要です。 ドライブレコーダの1分毎のファイルを結合する。(MP4Box.exe使用) セルスター(CSD-260)用ですが、ファイル形式が同じであれば他の機種にも使用可能かと思います。 AVIutlとvsd_pluginsで4倍速編集できるように4倍速用のGPSデータも同時に作成します。 CSD-260ファイル結合(CSD-260ファイル結合.nako)のインストール 1.「CSD-260ファイル結合.nako」をダウンロードする。 「CSD-260_SDコピー」で作成したプログラムパス(D ¥DriveRec)にコピーする。 例) D ¥DriveRec/ CSD-260/ CSD-260_SDコピー.nako CSD-260ファイル結合.nako 2.「MP4Box.ZIP」をダウンロードする。 「MP4Box.ZIP」の「MP4Box.exe」をプログラムパス(D ¥DriveRec)にコピーする。 例) D ¥DriveRec/ CSD-260/ CSD-260_SDコピー.nako CSD-260ファイル結合.nako MP4Box.exe 使い方 1.「CSD-260ファイル結合.nako」を実行する。 (前回終了時の処理パスが表示される。) 2.[読込]ボタンを押す。 フォルダ選択ダイアログが表示されるので、確認して[OK]ボタンを押す。     選択した、処理パスのデータ一覧が表示される フォルダ名(起動時間-停止時間)の一覧が表示される 「設定.INI」に処理パスが保存される     3.[処理]を確認し、結合する場合はクリックして 【結 合】に変更する。 【 済 】は、【 済 】→【結 合】→【 済 】と変更できる(結合済で再結合可能) 【未結合】は、【結 合】→【未結合】→【結 合】と変更できる(未結合で結合可能) 4.[結合]ボタンを押す。 【 済 】は、「 済 」と表示される 【結 合】は、「結合中」→「結合済」と表示される 【未結合】は、「未結合」と表示される     【結 合】の処理フォルダのファイルが結合されて、結合ファイルが保存される 5.[読込]ボタンを再度押す。 フォルダ選択ダイアログが表示されるので、確認して[OK]ボタンを押す。     「 済 」→【 済 】と表示される(結合済で再結合可能) 「結合済」→【 済 】と表示される(結合済で、再結合可能) 「未結合」→【未結合】と表示される(未結合で、結合可能) ※結合中に動画の再生もできますが、処理速度によって再生途中で次のファイルが再生がされます。 また動画再生には、「LAVFilters」等のコーディックパックが必要です。 6.[中断]ボタンを押す 中断ダイアログが表示され、[はい]ボタンを押すと[中断]ボタンが[中断中]となる。 処理中のフォルダの結合が終了後、結合処理が中断する。     処理フォルダと結合ファイル名 プログラムパス(D ¥DriveRec) データパス(D ¥ドライブレコーダ¥CSD-670FH)と処理フォルダ     結合前の処理フォルダの結合前ファイル 結合後の処理フォルダのファイル     結合前ファイルを削除した、処理フォルダの結合ファイル 処理フォルダに、「210715_195742_I_1.mp4」から「210715_200116_I_1.mp4」のファイルがある場合。 結合ファイルは、「210715_195742-200116_結合.mp4」で保存される。 「210715_195742-200116_結合.nme」(GPSファイル) 「210715_195742-200116_結合(4倍).nme」(GPSファイル)     コメント/CSD-260ファイル結合 名前 とりあえず最新版(2021/12/16)とします。 - hihiro (2021-12-16 12 06 25) 0時(日本時間で9時をまたがった時のデータ再修正他) - hihiro (2021-12-16 12 07 33) GPSの4倍速変換ファイルのデータ修正 - hihiro (2021-12-14 17 55 38) 0時(日本時間で9時をまたがった時のデータ修正) - hihiro (2021-12-14 17 55 53) 動画結合とGPSデータ抽出に「MP4Box.exe」を使用 - hihiro (2021-10-30 19 20 25) https //gpac.wp.imt.fr/home/から最新のバージョンもダウンロードできます。 - hihiro (2021-10-30 19 20 38) 「ダウンロード」→「ナイトリービルド」よりダウンロード - hihiro (2021-10-30 19 22 03) 「gpac-1.1.0-DEV-rev1420-g7e91b829-master-x64.exe」(64Bit用) - hihiro (2021-10-30 19 22 58) 「gpac-1.1.0-DEV-rev1420-g7e91b829-master-win32.exe」(64Bit用) - hihiro (2021-10-30 19 23 41) 結合処理中に動画再生もできますが、「LAVFilters」等のコーディックパックが必要かもしれません - hihiro (2021-10-30 19 05 03) https //github.com/Nevcairiel/LAVFilters/releasesで必要なバージョンをダウンロードして下さい。 - hihiro (2021-10-30 19 05 27) 現在ダウンロード可能なバージョンです。 - hihiro (2021-10-30 19 06 11) 「LAVFilters-0.75.1-Installer.exe」(インストーラパック) - hihiro (2021-10-30 19 06 33) 「LAVFilters-0.75.1-x64.zip」(64Bit用) - hihiro (2021-10-30 19 06 58) 「LAVFilters-0.75.1-x86.zip」(32Bit用) - hihiro (2021-10-30 19 07 20) CSD-260ファイル結合の最終版を公開します。 - hihiro (2021-10-30 19 01 14) CSD-260をCSD-670FHに更新しましたので、手直しはしないつもりです。 - hihiro (2021-10-30 19 02 02) コメントありましたらご記入ください。 名前 コメント 以前のコメントを残して置きます。 -- hihiro (2021-12-14 17 54 45) 動画再生には、「MCI補助ライブラリ改」を使用させていただいています。 -- hihiro (2014-11-30 20 06 12) 動画を再生するには、「Combined Community Codec Pack」等が必要な場合がある。再生時は、「LAV Splitter」が動いている -- hihiro (2014-11-30 18 25 34) 読込後、ファイル名をダブルクリックすると動画の確認が出来る。結合実行中、動画を表示して経過の確認できるようにした。 -- hihiro (2014-11-30 18 09 46) Ver2にバージョンアップした。 -- hihiro (2014-11-30 18 09 46) ***************************************************** ここまでは、旧バージョンのコメント AVIutlとvsd_pluginsで4倍速編集できるようにGPSデータを変換するプログラム作成中Googlマップにも対応 -- hihiro (2014-07-23 21 01 29) AVIutlとvsd_pluginsで合成する場合は、拡張子を*.txtから*.nmeに変更するか、自動判別でなくNMEA-0183を選んでください -- hihiro (2014-06-25 21 15 41) 結合と同時に、GPSデータも結合して抽出できるようにしました。AVIutlとvsd_pluginsで合成可能です。 -- hihiro (2014-06-25 21 12 11) 1倍速再生では見るのも大変なので4倍速等のファイルを作成して楽しんでいます。 -- hihiro (2014-06-08 20 37 53) 残念ながら、GPSデータ等は失われてしまいます。画像と音声のみの結合となります。 -- hihiro (2014-06-08 20 36 47) CSD-260の記録ファイルは1分毎に作成されるので、MP4BOX.EXEを使った結合ソフトを作りました。 -- hihiro (2014-06-08 20 35 47)
https://w.atwiki.jp/r-intro/pages/32.html
目次 目次 ファイル 読み込み テキストファイルの中身を簡単に読み込む ヌル(0x00)を含むCSVファイルやTSVファイルを読み込む ヌル(NULL)が含まれるテキストファイルをread.table関数で読み込む ヌル(0x00)を含むテキストファイルを高速に読み込む 書き込み ベクトルの要素をテキストファイルに書き込む ファイルへの高速な書き込み fwriteによる日付時刻型の出力 テンポラリファイルを利用する 文字コードを指定してCSVファイルを読み込む BOM(バイトオーダーマーク)が付いたファイルを読み込む 新常用漢字表の漢字を含むテキストファイルを読み込む 警告メッセージ「line ○ appears to contain embedded nulls」 サイズが非常に大きなテキストファイルを簡単に作成する 様々な文字コードのCSVファイルを読み込む テキストファイルを高速に読み込む バイナリファイルを作成する ファイルとディレクトリ ファイルやディレクトリの存在を確認する ディレクトリ カレントディレクトリを取得する カレントディレクトリを設定する ディレクトリ内のファイル一覧を得る ディレクトリ一覧を得る 文字列型ベクトルを簡単にテキストファイルに出力する ファイル 読み込み テキストファイルの中身を簡単に読み込む scan関数を使うとテキストファイルの中身をベクトルに簡単に読み込むことができる。以下の6行からなるテキストファイルを「text.txt」として保存する。 A abc あいう 阿伊宇 123xyz 読み込んでみる。 lines - scan("text.txt", what = character(0)) Read 5 items print(lines) [1] "A" "abc" "あいう" "阿伊宇" "123xyz" whatオプションをcharacter(0)とすることで、すべてを文字列で読み込む。デフォルトでは一行一要素でベクトルに代入される。空行(5行目)はデフォルトでは読み込まれない。これを読み込むようにするには、blank.lines.skipオプションをFALSEにする。 lines - scan("text.txt", what = character(0), blank.lines.skip = FALSE) Read 6 items print(lines) [1] "A" "abc" "あいう" "阿伊宇" "" "123xyz" 「Read 6 items」を表示しなくするには、quietオプションをTRUEにする。 lines - scan("text.txt", what = character(0), quiet = TRUE) print(lines) [1] "A" "abc" "あいう" "阿伊宇" "123xyz" ヌル(0x00)を含むCSVファイルやTSVファイルを読み込む 始めにヌルを含むCSVファイルを作成する。 ch1 - c(0x41 0x43, 0x2c, 0x00, 0x2c, 0x47 0x49, 0x0d, 0x0a) ch1 - c(0x41 0x43, 0x2c, 0x00, 0x2c, 0x47 0x49, 0x0d, 0x0a) ch2 - c(0x61, 0x00, 0x63, 0x2c, 0x64 0x66, 0x2c, 0x67 0x69, 0x0d, 0x0a) ra - as.raw(c(ch1, ch2)) writeBin(ra, "temp.csv") ファイルをメモ帳で開くと、以下のようになる。1行目の2列目は列の値自体がヌルで、2行目の1列目は「a」と「c」の間は空白(0x20)ではなくヌル(0x00)である。 ABC, ,GHI a c,def,ghi 標準で搭載されているread.tableは、skipNulオプションにTRUEを指定しないと、ヌルだけの列は列とは認識されず、行によって列数が異なることになるため、エラーが発生して読み込みに失敗する。skipNulオプションにTRUEを指定と、ヌルは完全に無視して他はすべて読み込まれる。ヌルの次の「c」もきちんと読み込まれている。 dtf - read.table("temp.csv", header = FALSE, sep = ",") scan(file = file, what = what, sep = sep, quote = quote, dec = dec, でエラー line 2 did not have 2 elements 追加情報 警告メッセージ 1 read.table("temp.csv", header = FALSE, sep = ",") で line 1 appears to contain embedded nulls 2 read.table("temp.csv", header = FALSE, sep = ",") で line 2 appears to contain embedded nulls print(dtf) エラー オブジェクト dtf がありません dtf - read.table("temp.csv", header = FALSE, sep = ",", skipNul = TRUE) print(dtf) V1 V2 V3 1 ABC GHI 2 ac def ghi readrパッケージのread_delim関数を試してみる。ヌルだけの列はきちんと処理されているようだが、ヌルを含む列は、ヌル以降は読み込まれていない(「c」が表示されない)。 library(readr) tib - read_delim("temp.csv", delim = ",", col_names = FALSE, progress = FALSE, show_col_types = FALSE) 警告メッセージ One or more parsing issues, call `problems()` on your data frame for details, e.g. dat - vroom(...) problems(dat) print(data.frame(tib)) X1 X2 X3 1 ABC NA GHI 2 a def ghi data.tableパッケージのfread関数を使う。これはヌルを完全に無視して読み込むし、ヌルだけの列は空欄(NA)ということで処理できているし、ヌル以降の文字もきちんと読み込まれている。 library(data.table) dtt - fread("temp.csv", header = FALSE, sep = ",", showProgress = FALSE) print(dtt) V1 V2 V3 1 ABC GHI 2 ac def ghi ヌル(NULL)が含まれるテキストファイルをread.table関数で読み込む read.table関数は、読み込むファイルにヌル(NULL、0x00)が含まれていると、列内のヌル以降は読み込まなくなる。これをヌルは無視してとにかく読み込むようにするには、skipNulオプションにTRUEを指定する。以下は、3行からなるテキストファイルtemp.txtを作成し、そのファイルを読み込んだ例。3行目の「c」の次にはヌルを含んでおり、デフォルトでは警告が発生しているが、skipNulオプションにTRUEを指定すると、ヌルを無視してすべて読み込んでいることがわかる。 Sys.getlocale() [1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8" ch1 - c(0x30 0x39, 0x0d, 0x0a, 0x41 0x5a, 0x0d, 0x0a) ch2 - c(0x61 0x63, 0x00, 0x65 0x7a, 0x0d, 0x0a) ra - as.raw(c(ch1, ch2)) writeBin(ra, "temp.txt") read.table("temp.txt") V1 1 0123456789 2 ABCDEFGHIJKLMNOPQRSTUVWXYZ 3 abc 警告メッセージ read.table("temp.txt") で line 3 appears to contain embedded nulls read.table("temp.txt", skipNul = TRUE) V1 1 0123456789 2 ABCDEFGHIJKLMNOPQRSTUVWXYZ 3 abcefghijklmnopqrstuvwxyz ヌル(0x00)を含むテキストファイルを高速に読み込む 始めにヌルを含む巨大なテキストファイルを作成する。以下は文字コードがUTF-8の環境のため(3×5+2)×2×10^7=340,000,000バイト(約324MB)のテキストファイルを作成している。ファイルの行数は10^7=10,000,000行。それぞれの行は苗字と名前の間にヌル(0x00)が挟まれている。 Sys.getlocale() [1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8" ra1 - unlist(iconv("石見", toRaw = TRUE)) ra2 - unlist(iconv("舞菜香", toRaw = TRUE)) ra3 - unlist(iconv("和多田", toRaw = TRUE)) ra4 - unlist(iconv("美咲", toRaw = TRUE)) ra - c(ra1, as.raw(0), ra2, as.raw(0x0a), ra3, as.raw(0), ra4, as.raw(0x0a)) writeBin(rep(ra, 10 ^ 7), "temp.txt") file.info(dir(patter = "temp\\.txt"))["size"] size temp.txt 3.4e+08 scan関数を使用して読み込む場合は、skipNulオプションにTRUEを指定しないとうまく読み込むことができない。 lns - scan("temp.txt", what = character(), sep = "\n", quiet = TRUE) 警告メッセージ scan("temp.txt", what = character(), sep = "\n", quiet = TRUE) で 入力文字列の中に nul が埋め込まれています length(lns) [1] 20000000 lns[1 3] [1] "石見" "和多田" "石見" lns - scan("temp.txt", what = character(), sep = "\n", quiet = TRUE, skipNul = TRUE) length(lns) [1] 20000000 lns[1 3] [1] "石見舞菜香" "和多田美咲" "石見舞菜香" read.table関数を使用して読み込む場合も、skipNulオプションにTRUEを指定しないとうまく読み込むことができない。 dtf - read.table("temp.txt", header = FALSE, sep = "\n") 警告メッセージ 1 read.table("temp.txt", header = FALSE, sep = "\n") で line 1 appears to contain embedded nulls 2 read.table("temp.txt", header = FALSE, sep = "\n") で line 2 appears to contain embedded nulls (表示省略) 入力文字列の中に nul が埋め込まれています nrow(dtf) [1] 20000000 head(dtf, 3) V1 1 石見 2 和多田 3 石見 dtf - read.table("temp.txt", header = FALSE, sep = "\n", skipNul = TRUE) nrow(dtf) [1] 20000000 head(dtf, 3) V1 1 石見舞菜香 2 和多田美咲 3 石見舞菜香 それぞれの関数で読み込みに要する時間を計測してみる。 system.time( + scan("temp.txt", what = character(), sep = "\n", quiet = TRUE, skipNul = TRUE) + ) ユーザ システム 経過 3.06 0.14 3.86 system.time( + scan("temp.txt", what = character(), sep = "\n", quiet = TRUE, skipNul = TRUE) + ) ユーザ システム 経過 3.35 0.14 3.89 system.time( + read.table("temp.txt", header = FALSE, sep = "\n", skipNul = TRUE) + ) ユーザ システム 経過 3.06 0.09 4.03 system.time( + read.table("temp.txt", header = FALSE, sep = "\n", skipNul = TRUE) + ) ユーザ システム 経過 2.92 0.20 4.06 scan関数の方が若干早い。なお、単純にテキストファイルを読み込むだけであればreadrパッケージのfread関数やread_lines関数のほうが高速に動作するが、以下の例のとおりにヌルを含むとうまく動作をしない。これを制御するオプションは無いようだ。 library(readr) fread("temp.txt", sep = "\n") fread("temp.txt", sep = "\n") でエラー 文字列の中に nul が埋め込まれています 石見\0舞菜香 追加情報 警告メッセージ fread("temp.txt", sep = "\n") で Previous fread() session was not cleaned up properly. Cleaned up ok at the beginning of this fread() call. read_lines("temp.txt", progress = FALSE) character(0) 書き込み ベクトルの要素をテキストファイルに書き込む write関数を使う。次のベクトルの中身をテキストファイル「output.txt」に書き込む s - c("a", "AB", "あいう", "", "阿伊宇") write(s, file = "output.txt") カレントディレクトリにファイル「output.txt」がつくられ、一要素一行の以下のような中身になっているはず。同名ファイルが既にある場合は、そのファイルはいったん削除され、新たにファイルがつくられる。 a AB あいう 阿伊宇 既にある同名ファイルに追加したい場合は、appendオプションをTRUEにする。 write(s, file = "output.txt", append = TRUE) ファイルoutput.txtの中身は以下のようなったはず。 a AB あいう 阿伊宇 a AB あいう 阿伊宇 これまでは文字列型ベクトルを出力していたが、数値型ベクトルの場合は次のように書き込まれる。 n - 1 3 write(n, file = "output.txt") 1 2 3 要素と要素の間のセパレーターはデフォルトでは空白一つ(0x20)。これを変えるにはsepオプションにセパレーターを指定する。 write(n, file = "output.txt", sep = "\n") 1 2 3 ファイルへの高速な書き込み data.tableパッケージのfwrite関数を使う。以下は、行数が100万のデータフレームを、write.table関数とfwrite関数を使ってそれぞれTSV形式のテキストファイルに書き込んだ例。書き込んだ行数はヘッダー行も含むため100万1行であることに注意。それぞれ2回繰り返し行ったが、fwrite関数による書き込みのほうが10倍以上速いことがわかる。 library(data.table) n - 10 ^ 6 no - 1 n s - c("カナメ", "フレイア", "美雲", "マキナ", "レイナ") name - sample(s, n, replace = TRUE) shoe_size - round(rnorm(n, 23.5, 1), 1) dtf - data.frame(no, name, shoe_size) head(dtf, 3) no name shoe_size 1 1 美雲 22.6 2 2 マキナ 22.5 3 3 レイナ 23.5 system.time( + write.table(dtf, "temp.tsv", sep = "\t", row.name = FALSE, quote = FALSE) + ) ユーザ システム 経過 3.48 0.18 3.71 system.time( + write.table(dtf, "temp.tsv", sep = "\t", row.name = FALSE, quote = FALSE) + ) ユーザ システム 経過 3.45 0.09 3.54 system.time( + fwrite(dtf, "temp.tsv", sep = "\t", row.name = FALSE, quote = FALSE) + ) ユーザ システム 経過 0.07 0.02 0.04 system.time( + fwrite(dtf, "temp.tsv", sep = "\t", row.name = FALSE, quote = FALSE) + ) ユーザ システム 経過 0.16 0.00 0.05 fwriteによる日付時刻型の出力 data.tableパッケージのfwrite関数では、日付時刻型のオブジェクトを出力するとUTCに変換して出力されてしまう(ちょうど9時間前の日付時刻が出力される)。以下の例のとおり、出力元のオブジェクトのタイムゾーンをJSTに設定しても、出力はUTCの日付時刻になり、それを表す記号(Z)が付けられて出力される。オブジェクトの値をそのまま(JSTのまま)出力したい場合は、dateTimeAsオプション(デフォルトは「ISO」)に「write.csv」を指定すると、よく見る書式でかつJSTで出力される。 「write.csv」を指定したときのファイルはExcelで開くと、その列はそのまま日付時刻型の値になる便利な書式である。 library(data.table) library(lubridate) n - 3 no - 1 n dtm - make_datetime(2000, 1 n, 1, 2, 3, 4, "Asia/Tokyo") dtf - data.frame(no, name, dtm) print(dtf) no name dtm 1 1 January 2000-01-01 02 03 04 2 2 February 2000-02-01 02 03 04 3 3 March 2000-03-01 02 03 04 fwrite(dtf, "temp.csv", sep = ",") shell("type temp.csv") no,name,dtm 1,January,1999-12-31T17 03 04Z 2,February,2000-01-31T17 03 04Z 3,March,2000-02-29T17 03 04Z fwrite(dtf, "temp.csv", sep = ",", dateTimeAs = "ISO") shell("type temp.csv") no,name,dtm 1,January,1999-12-31T17 03 04Z 2,February,2000-01-31T17 03 04Z 3,March,2000-02-29T17 03 04Z fwrite(dtf, "temp.csv", sep = ",", dateTimeAs = "squash") shell("type temp.csv") no,name,dtm 1,January,19991231170304000 2,February,20000131170304000 3,March,20000229170304000 fwrite(dtf, "temp.csv", sep = ",", dateTimeAs = "write.csv") shell("type temp.csv") no,name,dtm 1,January,2000-01-01 02 03 04 2,February,2000-02-01 02 03 04 3,March,2000-03-01 02 03 04 テンポラリファイルを利用する 一時的なファイル(テンポラリファイル)を利用するにはtempfile関数を使う。tempfile関数はテンポラリファイルを作成するのではなく、テンポラリファイルとして使用できるファイル名を返すことに注意。以下、実行例。 filename - tempfile() filename [1] "C \\Users\\○○\\AppData\\Local\\Temp\\××\\□□" write(1 3, file = filename) dtf - read.table(file = filename) dtf V1 V2 V3 1 1 2 3 上記はWindows 10 で実行した例。○○はアカウント名、××と□□は任意の文字列。××は現在起動したR専用のテンポラリディレクトリであり、そのRを終了するとこのディレクトリは自動で削除される。□□はテンポラリファイルのファイル名で、このファイルも自動で削除される。 このテンポラリディレクトリ名を得るにはtempdir関数を使う。 tempdir() [1] "C \\Users\\○○\\AppData\\Local\\Temp\\××" 文字コードを指定してCSVファイルを読み込む read.csv関数を使う。その際、fileEncodingオプションに文字コードを指定する。シフトJIS(CP932)であれば「CP932」を、UTF-8であれば「UTF-8」を指定する。特に指定をしないと、今の環境のロケールの文字コードで読み込む。指定に誤りがあると、エラーが発生する。 以下は、以下のテキストをそれぞれシフトJIS(CP932)でtextcp932.csv、UTF-8でtextutf8.csvと保存をして、それぞれ読み込ませた例。 no,姓,名 1,中野,一花 2,中野,二乃 Sys.getlocale() [1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932" dtf - read.csv("textcp932.csv") print(dtf) no 姓 名 1 1 中野 一花 2 2 中野 二乃 dtf - read.csv("textcp932.csv", fileEncoding = "CP932") print(dtf) no 姓 名 1 1 中野 一花 2 2 中野 二乃 dtf - read.csv("textutf8.csv") make.names(col.names, unique = TRUE) でエラー 2 は不正なマルチバイト文字です dtf - read.csv("textcp932.csv", fileEncoding = "CP932") print(dtf) no 姓 名 1 1 中野 一花 2 2 中野 二乃 BOM(バイトオーダーマーク)が付いたファイルを読み込む fileEncodingオプションを使う。BOMが付いたUTF-8の場合はUTF-8-BOM、UTF-16の場合はUTF-16を指定するが、そのまま読み込んでくれる。以下は、read.csv関数を使用した例。 以下の3行を、それぞれBOM付きのUTF-8、UTF-16形式で、bomutf8.csv、bomutf16.csvで保存する。 no,姓,名 1,佐藤,太郎 2,鈴木,次郎 read.csv関数で読み込む。 dtf - read.csv("bomutf8.csv") make.names(col.names, unique = TRUE) でエラー ef サ bf no に不正なマルチバイト文字があります dtf - read.csv("bomutf8.csv", fileEncoding = "UTF-8-BOM") dtf no 姓 名 1 1 佐藤 太郎 2 2 鈴木 次郎 dtf - read.csv("bomutf16.csv", fileEncoding = "UTF-16") dtf no 姓 名 1 1 佐藤 太郎 2 2 鈴木 次郎 BOMについてはこちらを参照のこと。RにおけるBOMの扱いは、connectionsのヘルプを参照。 ?connections 新常用漢字表の漢字を含むテキストファイルを読み込む Windows版Rのバージョン4.1.3までは、新常用漢字表の漢字のうちUnicodeにしか存在しない文字、すなわちシフトJISコードが割り当てられていない漢字を含むテキストファイルを読み込むことはエンコードを指定してもできなかった。例えば、以下の内容をテキストファイルmoji.txtとしてUTF-8で保存する。 ABC 123 あいう 補塡する 𠮟る 辰𠮷𠀋一郎 𩸽(ホッケ)を食べる 𩹉(トビウオ)を捕まえる バージョン4.1.3で文字コードにUTF-8を指定してscan関数で読み込むと失敗する。 s - scan(file = "moji.txt", what = character(), sep = "\n", fileEncoding = "UTF-8") Read 4 items 警告メッセージ scan(file = "moji.txt", what = character(), sep = "\n", fileEncoding = "UTF-8") で 入力コネクション moji.txt に不正な入力がありました print(s) [1] "ABC" "123" "あいう" "補" バージョン4.2.2で文字コードにUTF-8を指定してscan関数で読み込むとうまくいく。 s - scan(file = "moji.txt", what = character(), sep = "\n", fileEncoding = "UTF-8") Read 8 items print(s) [1] "ABC" "123" [3] "あいう" "補塡する" [5] "頰をなでる" "辰𠮷𠀋一郎" [7] "𩸽(ホッケ)を食べる" "𩹉(トビウオ)を捕まえる" サロゲートペアの文字(6~8行目)も、正しく読み込んでいることがわかる。 警告メッセージ「line ○ appears to contain embedded nulls」 read.tableやread.csv関数を使用してこのメッセージが表示されたときは、読み込んだファイルにヌル(0x00、NULL)が含まれており、そのために正しく読み込めていない可能性が高い。skipNulオプションをTRUEにすると、ヌルをスキップして読み込むようになり、このメッセージが表示されなくなる。 dtf - read.csv("○○○", header = TRUE) 警告メッセージ read.table(file = file, header = header, sep = sep, quote = quote, で line ○ appears to contain embedded nulls dtf - read.csv("○○○", header = TRUE, skipNul = TRUE) サイズが非常に大きなテキストファイルを簡単に作成する 動作確認でサイズが非常に大きなテキストファイルが必要なときがあるが、文字型ベクトルを使うと簡単に作成することができる。 以下は、Windows環境でサイズが5億バイト(≒476.8MB)のファイルを、一つのコマンドで作成している。10バイトの文字列("AB12あい"の8バイトと改行コードCR+LFの2バイト)を5,000万個作り、それをテキストファイルに出力している。文字コードはシフトJIS、改行コードはCR+LFとしているため、サイズが単純に10バイト×5,000万=5億バイトとなっている。作成には10分弱要している。 cat(rep("AB12あい", 5 * 10 ^ 7), file = "temp.txt", sep = "\n") dir(".", "temp\\.txt") [1] "temp.txt" file.size("temp.txt") [1] 5e+08 様々な文字コードのCSVファイルを読み込む read.table関数を使う。fileEncodingオプションに文字コードを指定する。 動作確認のため、最初にPowerShellを使ってカレントディレクトリに、順番にシフトJIS、UTF-8(BOM無し)、UTF-8(BOM付き)、UTF-16(ビッグエンディアン、BOM付き)、UTF-16(リトルエンディアン、BOM付き)のCSVファイルを出力する。PowerShellのコマンドレットでは、Unicode系は原則BOM付きとなる。そのため、BOM無しのUTF-8の出力には、FileクラスのWriteAllLinesメソッドを使用している。 PS $lines = "1,ABC", "2,abc", "3,あいう" PS $odir = (gl).Path PS $lines | Out-File -Encoding default ($odir + "\sjis.csv") PS [IO.File] WriteAllLines(($odir + "\utf8nb.csv"), $lines) PS $lines | Out-File -Encoding utf8 ($odir + "\utf8wb.csv") PS $lines | Out-File -Encoding bigendianunicode ($odir + "\utf16bewb.csv") PS $lines | Out-File -Encoding unicode ($odir + "\utf16lewb.csv") PS Get-Content .\sjis.csv 1,ABC 2,abc 3,あいう PS Get-Content .\utf8nb.csv -Encoding utf8 1,ABC 2,abc 3,あいう Rを起動して、read.table関数で読み込んでみる。現在の環境下における文字コードは特にオプションを指定しなくても読み込むことができる。 Sys.getlocale() [1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8" read.table("sjis.csv", sep = ",") V1 V2 1 no name 2 1 ABC 3 2 abc 4 3 \x82\xa0\x82\xa2\x82\xa4 read.table("utf8nb.csv", sep = ",") V1 V2 1 no name 2 1 ABC 3 2 abc 4 3 あいう fileEncodingオプションにそれぞれ文字コードを指定する。UTF-16の場合、「UTF-16」を指定すればバイトオーダーマークからエンディアンを推定して読み込む。エンディアンを指定することもできる。最後の例のとおりに、エンディアンの指定を間違えると、指定のとおりに読み込もうとして読み込みに失敗する。 read.table("sjis.csv", sep = ",", fileEncoding = "SJIS") V1 V2 1 1 ABC 2 2 abc 3 3 あいう read.table("utf8nb.csv", sep = ",", fileEncoding = "UTF-8") V1 V2 1 1 ABC 2 2 abc 3 3 あいう read.table("utf8wb.csv", sep = ",", fileEncoding = "UTF-8") V1 V2 1 1 ABC 2 2 abc 3 3 あいう read.table("utf16bewb.csv", sep = ",", fileEncoding = "UTF16") V1 V2 1 1 ABC 2 2 abc 3 3 あいう read.table("utf16lewb.csv", sep = ",", fileEncoding = "UTF16") V1 V2 1 1 ABC 2 2 abc 3 3 あいう read.table("utf16bewb.csv", sep = ",", fileEncoding = "UTF-16BE") V1 V2 1 1 ABC 2 2 abc 3 3 あいう read.table("utf16lewb.csv", sep = ",", fileEncoding = "UTF-16LE") V1 V2 1 1 ABC 2 2 abc 3 3 あいう read.table("utf16lewb.csv", sep = ",", fileEncoding = "UTF-16BE") V1 1 \ufffe\u3100Ⰰ䄀䈀䌀ഀ\u0a00㈀Ⰰ愀戀挀ഀ\u0a00㌀Ⰰ䈰䐰䘰ഀ\u0a00 警告メッセージ read.table("utf16lewb.csv", sep = ",", fileEncoding = "UTF-16BE") で incomplete final line found by readTableHeader on utf16lewb.csv テキストファイルを高速に読み込む data.tableパッケージを利用する。以下は、100万行のテキストファイルtemp.txtを作成し、Rに標準で搭載されているread.table関数と、data.tableパッケージに含まれているfread関数で、それぞれそのファイルを読み込む時間を計測した結果。 library(data.table) mx - matrix(rnorm(1000000 * 4), ncol = 4) write.table(mx, "temp.txt", col.names = FALSE, row.names = FALSE) system.time(dtf - read.table("temp.txt", header = FALSE)) ユーザ システム 経過 7.94 0.15 8.14 system.time(dtb - fread("temp.txt")) ユーザ システム 経過 0.13 0.01 0.07 system.time(dtf - read.table("temp.txt", header = FALSE)) ユーザ システム 経過 7.41 0.09 7.51 system.time(dtb - fread("temp.txt")) ユーザ システム 経過 0.17 0.02 0.04 dim(dtf) [1] 1000000 4 dim(dtb) [1] 1000000 4 head(dtf) V1 V2 V3 V4 1 1.7752384 -1.4123053 0.24326013 0.5067002 2 -1.3369478 0.4076904 0.42491207 -1.6561556 3 -1.4287960 0.2838613 2.01597774 -1.0682637 4 0.7791319 0.5361162 0.05211674 0.2194605 5 -0.8555709 -0.5486108 0.11662963 2.0608156 6 0.8034380 -2.0021208 -0.29818598 -0.4815675 dim(dtb) [1] 1000000 4 head(dtb) V1 V2 V3 V4 1 1.7752384 -1.4123053 0.24326013 0.5067002 2 -1.3369478 0.4076904 0.42491207 -1.6561556 3 -1.4287960 0.2838613 2.01597774 -1.0682637 4 0.7791319 0.5361162 0.05211674 0.2194605 5 -0.8555709 -0.5486108 0.11662963 2.0608156 6 0.8034380 -2.0021208 -0.29818598 -0.4815675 キャッシュの効果を考慮して、交互に2回ずつ実施している。最後に、読み込んだデータフレームとデータテーブルの次元とそれぞれの長さを表示している。ファイルの読み込みは、fread関数のほうが明らかに早いことがわかる。 バイナリファイルを作成する 数値型ベクトルでバイト列を作成し、それをロウ型に変換してwriteBin関数で出力すればよい。以下は、ch1とch2の2つの数値型ベクトルでバイト列を作成し、それを純粋にバイト単位でファイル出力した例。 ch1 - c(0x30 0x39, 0x0d, 0x0a, 0x41 0x5a, 0x0d, 0x0a, 0x61 0x7a, 0x0d, 0x0a) ch2 - c(0xe3, 0x81, 0x82, 0xe3, 0x81, 0x84, 0xe3, 0x81, 0x86, 0x0d, 0x0a) ra - as.raw(c(ch1, ch2)) writeBin(ra, "temp.txt") temp.txtを画面にダンプした結果は以下のとおり。 PS Format-Hex .\temp.txt パス ○○○ 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000 30 31 32 33 34 35 36 37 38 39 0D 0A 41 42 43 44 0123456789..ABCD 00000010 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 EFGHIJKLMNOPQRST 00000020 55 56 57 58 59 5A 0D 0A 61 62 63 64 65 66 67 68 UVWXYZ..abcdefgh 00000030 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 ijklmnopqrstuvwx 00000040 79 7A 0D 0A E3 81 82 E3 81 84 E3 81 86 0D 0A yz..ããã.. temp.txtをテキストエディタで文字コードをUTF-8に指定して開くと、以下のようになるはず。 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz あいう 本例では、結果をわかりやすくするためUTF-8の文字コードに相当する範囲で出力したのであって、そうではないバイト列(ヌル等)でも問題なく出力することができる。 ファイルとディレクトリ ファイルやディレクトリの存在を確認する ファイルの存在の有無を確認するにはfile.exists関数を、フォルダーの場合はdir.exists関数を使う。Rはフォルダー(ディレクトリ)の区切りを示す記号に「¥」(円マーク)と「/」(スラッシュ)の両方を使うことができる。 file.exists("C /Windows/win.ini") [1] TRUE file.exists("C /Windows/win.inii") [1] FALSE dir.exists("C /Windows") [1] TRUE dir.exists("C /Windowss") [1] FALSE file.exists関数は、フォルダーを指定した場合、そのフォルダー名の最後に区切り記号を付けないとTRUEを返すので注意。 file.exists("C /Windows") [1] TRUE file.exists("C /Windows/") [1] FALSE dir.exists関数はファイルであればFALSE、フォルダーであればTRUEを返す。 dir.exists("C /Windows") [1] TRUE dir.exists("C /Windows/") [1] TRUE dir.exists("C /Windows/win.ini") [1] FALSE ディレクトリ カレントディレクトリを取得する getwd関数を使う。インストール直後のスタートメニューからRを起動した状態で実行してみる。 getwd() [1] "C /Users/○○/Documents" ○○にはアカウント名が入る。 これはスタートメニューからRを起動するとそのようになっただけであり、例えば既存の.RDataファイルをダブルクリックしてRを起動すれば、その.RDataを置いてあるディレクトリをカレントディレクトリとしてRは起動することになる。 カレントディレクトリを設定する getwd関数を使う。 getwd() [1] "C /Users/○○/Documents" setwd("C /Users/○○/Pictures/") getwd() [1] "C /Users/○○/Pictures" setwd("C /Users/○○/Picture/") setwd("C /Users/○○/Picture/") でエラー 作業ディレクトリを変更できません 最後の例のとおり、存在しないディレクトリを指定するとエラーが発生する。 ディレクトリ内のファイル一覧を得る list.files関数を使う。pathオプションにはファイル一覧を取得するディレクトリを指定する。patternオプションに何も指定しないと全てのファイルを返す。特定のファイルのみを取得したい場合は、正規表現でファイル名のパターンを指定する。 以下は、とあるWindows 10環境下で行った例。 list.files(path = "C /Windows/Fonts") [1] "8514fix.fon" "8514fixe.fon" [3] "8514fixg.fon" "8514fixr.fon" (以下、表示省略) list.files(path = "C /Windows/Fonts", pattern = "^ms") [1] "msgothic.ttc" "msjh.ttc" "msjhbd.ttc" "msjhl.ttc" "msmincho.ttc" [6] "msyh.ttc" "msyhbd.ttc" "msyhl.ttc" "msyi.ttf" list.files(path = "C /Windows/Fonts", pattern = "^japan") character(0) ディレクトリ一覧を得る list.dirs関数を使う。第一引数にディレクトリ一覧を得たいディレクトリを指定すると、どのディレクトリに含まれるサブディレクトリが得られる。ただし、デフォルトでは、その指定したディレクトリ自身と、再帰的に得られるサブディレクトリ内のサブディレクトリも含まれる。以下、実行例。 list.dirs("C /Program Files/Windows NT") [1] "C /Program Files/Windows NT" [2] "C /Program Files/Windows NT/Accessories" [3] "C /Program Files/Windows NT/Accessories/en-US" [4] "C /Program Files/Windows NT/Accessories/ja-JP" [5] "C /Program Files/Windows NT/TableTextService" [6] "C /Program Files/Windows NT/TableTextService/en-US" [7] "C /Program Files/Windows NT/アクセサリ" 指定したディレクトリ内のサブディレクトリだけを得るには、recursiveオプションにFALSEを指定する。 list.dirs("C /Program Files/Windows NT", recursive = FALSE) [1] "C /Program Files/Windows NT/Accessories" [2] "C /Program Files/Windows NT/TableTextService" [3] "C /Program Files/Windows NT/アクセサリ" デフォルトでは絶対パスで表示されるが、full.namesオプションにFALSEを指定すると、第一引数に指定したディレクトリからの相対パスが得られる(指定したディレクトリは"")。 list.dirs("C /Program Files/Windows NT", full.names = FALSE) [1] "" "Accessories" "Accessories/en-US" [4] "Accessories/ja-JP" "TableTextService" "TableTextService/en-US" [7] "アクセサリ" list.dirs("C /Program Files/Windows NT", recursive = FALSE, full.names = FALSE) [1] "Accessories" "TableTextService" "アクセサリ" 文字列型ベクトルを簡単にテキストファイルに出力する cat関数を使う。sepオプションには文字型ベクトルの各要素の間に挟む文字列を指定する。以下の例では、最後のコマンドを実行後にはプロンプトは改行されないで表示される。 lns - c("ABC", "123", "あい") cat(lns, file = "temp.txt", sep = "\n") shell("type temp.txt") ABC 123 あい cat(lns, file = "temp.txt", sep = ",") shell("type temp.txt") ABC,123,あい 名前 コメント
https://w.atwiki.jp/swfadv/pages/26.html
更新日:2009/06/07 11 13 58 キャラクターファイルとは キャラクターファイルの作り方 Flash8以前(ActionScript2.0以前)でキャラクターファイルを制作する際の注意点 参考資料 キャラクターファイルとは キャラクターイベントで使用するキャラクター画像の素材作りについて解説します。 swfAdvで読み込み対応している画像形式は以下の通りです。 SWF 非プログレッシブ JPEG 非アニメーション GIF PNG しかしながら、swfAdvは以下の点によりSWF形式でのキャラクター素材作りを強く推奨しています。 立ち絵の輪郭の外側を見えなく(透過)させて背景と綺麗に馴染ませるには、通常の画像形式では難しい。(png, gifならば可能) 頻度が高いであろう表情変更の毎に画像読み込みをしていては非効率的。あらかじめ幾つかの表情パターンのをパッケージしたファイルをロードする方がプレイもスムーズになる。 まばたき、口パク、立ち絵自体が動く、などのキャラクターアニメーションが容易に実装できる。 ファイル数が減れば管理が楽になる。 本稿では、SWF形式でのキャラクターファイル制作について解説していきます。 キャラクターファイルの作り方 1.キャラクターイメージの制作 まずはキャラクターの絵素材を用意しましょう。 Flash上のグラフィックエディタで直接ペイントするか、PhotoShopなどのツールで制作した画像ファイルを使用します。 図1-1. Flashでペイント中の画面 画像ファイルを使用する場合、背景とキャラクターの体を馴染ませるためには輪郭の外が透過された画像を使う必要があります。 透過画像にはGIFとPNGが一般的ですが、GIFだと輪郭にジャギが出てしまうのでPNGを使うことをお勧めします。 絵が用意できたら、これをムービークリップインスタンスに変換します。変換してできたムービークリップを、ここでは 「表情ムービー」と呼ぶことにします。 複数の表情パターンを用意したい場合には、下のように各表情ごとに表情ムービーを制作していきます。 図1-2. 「平静」と「怒った」顔の表情ムービー 2.表情の定義 次は、手順1で制作した表情ムービーをswfAdvで使えるように準備します。 swfAdvはキャラクターファイルのrootのタイムラインを移動することで表情の切り替えを行っています。 では具体的にどう作業するかというと、下図のようにrootのタイムラインに表情の数だけキーフレームを切り、フレームラベルに 任意の表情名を記述するだけです。 図2-1.表情ごとに切られたキーフレーム あとは手順1で制作した表情ムービーを、対応した表情のキーフレームに配置すれば完了です。 配置の際に注意しなければならないのは、表情ムービー内のキャラクターの仕草によって画像の幅に違いがある場合です。 図2-2.違う横幅同士のイメージ比較 上図は横幅がばらばらのイメージを縦に同じ座標で並べたものです。その上から一番上のキャラクターの背骨の位置を基準に 赤い線を引きました。見てわかる通り、幅に差がある画像ほど背骨の位置がずれています。 この状態で各表情を同じ座標に全部配置してしまうと、表情が変わるたびにガクガク立ち居地がブレて見栄えが悪くなるでしょう。 なので、どこかの座標を基準に表情ムービーの位置を微調整する必要があります。 図2-3.座標を調整された表情ムービー 上図はx 0, y 0の座標を基準に、背骨の位置に調節されたものです。 これで綺麗に表情切り替えできるキャラクターになりました。 制作できる表情の数は、Flashの仕様((*1))に依存しますが、数が多くなるだけ容量も大きくなります。 数メガ単位まで膨れ上がってしまった場合は、複数のキャラクターファイルに分けるなど工夫する 必要がでてきます。 (例えば、同じキャラクターで違う衣装の絵がある場合、同一場面で服装を変えることは稀でしょうから ファイル分けし易いと言えるでしょう。) 3.表情の定義 今度は、シナリオファイルのテキストイベントから呼ばれる口パク機能を追加します。 この機能は無くてもシナリオ自体は動作しますので、必須ではありません。 ではまずはじめに、口の部分だけを切り抜いたアニメーションムービークリップを作ります。 これを口パクムービーと呼ぶことにしましょう。 swfAdvのテキストイベントでは、テキスト表示している最中に口パクムービーをループ再生しテキストが表示し終わったら 口パクムービーの1フレーム目で停止します。その点を留意してアニメーションを作っていきましょう。 図3-1.口パクムービー製作中のタイムライン だいたい0.3~0.4秒くらいで一回口を開閉させる動きにすると良い具合になると思います。 コマ数は多ければそれだけなめらかになりますが、閉じた状態と全開の状態と、その間を取った3コマでも それなりに綺麗になります。 できたアニメーションはムービークリップに変換し、表情ムービーとは別のシンボルにします。 次に、表情ムービー内に口パクムービーを追加します。 口パクムービーを作ったことで、口の部分は別のパーツになっているため、元の絵から口だけ削除した状態で 画像を用意します。 図3-2.口の無いイメージ この上階層に、先程作った口パクムービーを重ねればアニメーションの準備は完了です。 最後に、swfAdvがどのインスタンスが口なのかを特定するために、インスタンス名を設定しておきます。 口パクムービーと、その上の階層である表情ムービーの二つに下記の名前でインスタンス名を入力します。 指定箇所 インスタンス名 表情ムービー expression 口パクムービー mouth 表3-1.インスタンス名対応表 図3-3.表情ムービーへインスタンス名入力 図3-4.口パクムービーへインスタンス名入力 以上で口パク機能の実装が完了します。 Flash8以前(ActionScript2.0以前)でキャラクターファイルを制作する際の注意点 Flash9(ActionScript3.0)で制作されたFlashコンテンツは、Flash8以前の設定でパブリッシュされたFlashコンテンツと直接連携することができません。 Flash8以前で作られたキャラクターファイルをswfAdvで使うには、LocalConnectionオブジェクトを介して通信する必要が有ります。 通信するために、キャラクターファイル側に実装しなければならない機能として以下の二点が挙げられます。 コネクション名の生成、送信機能 各アクションに対応した処理を行う機能 作成例を以下に記述します。 1. コネクション名の生成 LocalConnectionで通信する際、同じコネクション名が使われているものがあると全てに送信されてしまいます。 キャラクターのように個々で表情を変えたり、口パクさせる必要のある場合は、ユニークなコネクション名である必要が有ります。 よってまず、swfAdvに対し読み込まれたキャラクターが、どんなコネクション名で通信するのかを知らせなければなりません。 swfAdvは、キャラクターを画面に表示した直後に「_PrototypeConnectName」という名前でコネクションを張るので、それに対しユニークなコネクション名を送信します。 接続後「onConnectionName」というメソッドに、コネクション名の文字列を引数で渡せば完了です。 2. アクション処理機能の実装 swfAdvからキャラクターに対して送信するアクション動作の処理を、スクリプトで記述します。 swfAdvがアクセスしてくるメソッドは以下の二種類です。 メソッド名 内容 expression 表情変更( chr action="face" id="1" 表情名 /chr ) lip 口パク{true 口パクオン, false 口パクオフ} quit キャラクターが画面から取り除かれる際に実行されるメソッド ※具体的な処理内容はキャラクターファイル側での実装となるので、必ずしもキャラクターファイルの作り方に記載した手法で作る必要はありません。 例:キャラクターファイルの1フレーム目に下記のようなスクリプトを記述します(サンプルダウンロード) var swfadvconnect LocalConnection = new LocalConnection(); //現在時刻+ランダム数値によるユニークになりそうな値を生成var date Date = new Date();var date_str String = (String(date.getDate()) + String(date.getHours()) + String(date.getSeconds()) + String(date.getUTCMilliseconds())); //コネクション名var realName String = "_maidConnectionName" +date_str; //生成したコネクション名でキャラクター自身にコネクションを張るswfadvconnect.connect(realName);//swfAdvにコネクション名を送信swfadvconnect.send("_PrototypeConnectName", "onConnectionName", realName); var _this = this;//表情メソッドswfadvconnect.expression = function(name String){ _this.gotoAndStop(name); //特定のフレームへジャンプ}//口パクメソッドswfadvconnect.lip = function(flag Boolean){ //口パクアニメーションのMovieClipを再生するか、1フレーム目で停止させるかの処理 if(flag){ _this.expression.mouth.play(); } else{ _this.expression.mouth.gotoAndStop(1); }}; 参考資料 画像形式について とほほの画像入門 開発blog ゲーム制作記事 サンプル製作 その1 サンプル製作 その2 名前 コメント